"""
字符串的CRUD操作
"""


# 字符串的增加（create）操作：   +   +=
def create():
    a, b = 'a', 'b'
    # 字符串相加+
    a = a + b
    print(a)
    # 字符串相加+=
    a += b
    print(a)
    # 通过索引的方式间接实现字符串指定位置插入字符，实际上字符串是不可改变对象，返回新的字符串
    a = 'hello_world'
    c = a[0:2] + 'c' + a[2:]
    print('插入前为：{1}，插入字符后的新字符串为：{0}'.format(c, a))
    return None


# 字符串的检索（retrieve）操作：  find()   index()   startswith()    endswith()    索引
def retrieve():
    content = 'I want to make friends with you!'
    # find()返回查找子串的索引
    print(content.find('wan'))
    # index()同样返回查找子串的索引
    print(content.index('wan'))
    # find和index的区别是find找不到元素返回-1，index会报错
    print(content.find('aks'))
    try:
        print(f"您要查找的内容索引为：{content.index('aks')}")
    except ValueError as e:
        print('sorry，未找到您要查找的内容~')
    # startswith & endswith
    print(content.startswith('I wan'))
    print(content.endswith('you'))
    # 索引   结束索引是闭区间，不包含本身
    print(content[7:len(content)])
    # 省略开始索引和结束索引  即表示检全部
    print(content[:])
    return None


# 字符串的更新（update）操作：   replace()    split()    join()
def update():
    # replace替换某个元素     返回新的字符串
    content = 'I love Python very much!'
    print(content.replace('e', 'i'))
    # split（分割）
    split_content = content.split(' ')
    print(f'分割后：{split_content}')
    # join（合并）
    print('|'.join(split_content))
    return None


# 字符串的删除（delete）操作:   strip()   lstrip()   rstrip()      返回新的字符串
def delete():
    content = ' 我 爱 你！ '
    content_1 = '我 爱 你！'
    # strip() 去除两端的空格字符或者指定的字符    lstrip():左端去除   rstrip():右端去除
    print(content.strip(), content.lstrip(), content.rstrip(), sep='----')
    print(f'比较结果：{content.strip() == content_1}')
    # [1,2,3] 去除两边的括号
    a = '[1,2,3]'
    print(a.replace('[', '').replace(']', ''))
    print(a.strip('[').strip(']'))
    # 最简单的方式，高级功能
    print(a.strip('[]'))
    return None


# 字符串的格式化输出
def format_str():
    # %也可以用来格式化字符串，但是一方面为了符合语言的设计理念，另一方面为了更好的可读性，Python中不推荐使用
    a = '2020-10-25 20:%s' % '48'
    print(a)
    # 按传入参数的默认顺序
    print('生日：{}-{}-{}'.format(2019, 10, 27))
    # 按指定参数索引
    print('{1},{0},{0},{1},{2}'.format('i', 'you', 'he'))
    # 按关键词参数
    print('{country},{city}'.format(city='重庆', country='China'))
    # 按变量
    city, name = '重庆', 'Excuse MI'
    print(f'{city}-{name}')
    # 处理浮点数（技巧）
    print('{:.3f}'.format(3.141592653))


"""
Unicode三明治
输入：bytes -> str       对应读取
处理(人)：str -> str
输出：str -> bytes       对应写入
"""


# 读取当前文件第二周_第二节tmp.py，并写入到新文件第二周_第二节.py中
def read_write():
    # 读取文件
    f_read = open(r'D:\PycharmProjects\learning\第二周_第二节tmp.py', 'r', encoding='utf-8')
    # 写入文件
    f_write = open('第二周_第二节.py', 'w', encoding='utf-8')
    f_write.write(f_read.read())
    print(f_read.read())  # 只能读取一次
    # 关闭文件
    f_read.close()
    f_write.close()


if __name__ == '__main__':
    create()
    retrieve()
    update()
    delete()
    format_str()
    read_write()
